// 志愿者用户的登录与注册


//导入数据库操作模块
const db = require('../db/index')
const bcrypt = require('bcryptjs')
// 密码加密，无解密，提高安全性，导致数据库内密码数据都是加密的

// 导入生成Token的包
const jwt = require('jsonwebtoken')
// 导入全局的配置文件
const config = require('../config')


// 定义路由相关处理函数
exports.regVol = (req,res)=>{
    // 获取客户端提交到服务器的用户信息
    const volunteerinfo = req.body
    //用户注册 
    // 定义SQL语句，查询用户名是否被占用
    const sqlStr = `select * from volunteerinfo where userName=?`
    db.query(sqlStr,volunteerinfo.userName,(err,results)=>{
        // 执行SQL语句失败
        if(err){
            return res.cc(err)
        }
        if(results.length>0){
            return res.cc('用户名被占用')
        }
        // 对密码进行加密
        // volunteerinfo.password = bcrypt.hashSync(volunteerinfo.password,10)
        // 用户插入
        const sqlstr = `insert into volunteerinfo(userName,password) values(?,?)`
        db.query(sqlstr, [volunteerinfo.userName, volunteerinfo.password], (err, results) => {
          // 插入失败
            if(err) return res.cc(err) 
            if (results.affectedRows !== 1) return res.cc('志愿者注册失败！')
            res.send({
                status:0,
                userName:volunteerinfo.userName,
                password:volunteerinfo.password,
                message:'注册成功',
                // token:'Bearer '+tokenStr,
            })
        })
    })   
    
}
exports.login=(req,res)=>{
    const volunteerinfo = req.body
    const sql = `select * from volunteerinfo where userName = ?`
    db.query(sql,volunteerinfo.userName,(err,results)=>{
        if(err) return res.cc(err)
        if(results.length!==1) return res.cc('登录失败')
        
        // const compareResult = bcrypt.compareSync(volunteerinfo.password,results[0].password)
        // const compareResult = bcrypt.compareSync(volunteerinfo.password,results[0].password)
        // if(!compareResult) return res.cc('登录失败')
        if(volunteerinfo.password!==results[0].password) return res.cc('登录失败')
        // 在服务器端生成Token的字符串
        const user = {...results[0],password:'',vol_pic:''}
        // 对用户的信息进行加密，生成Token字符串
        const tokenStr = jwt.sign(user,config.jwtSecretKey,{ expiresIn:config.expiresIn })
        // 调用res.send()将ToKen响应给客户端
        res.send({
            status:0,
            userName:volunteerinfo.userName,
            password:volunteerinfo.password,
            message:'登录成功',
            token:'Bearer '+tokenStr,
        })
    })
}

exports.queryUser=(req,res)=>{
    const sqlStr = `select * from volunteerinfo where is_delete=0`
    db.query(sqlStr,(err,results)=>{
        // 执行SQL语句失败
        if(err){
            return res.send({status:1,message:err.message})
        }else{
            res.json({results})
        }
    })   
}
// exports.searchUser=(req,res)=>{
//     const sqlStr = `select * from userinfo where userId=?`
//     db.query(sqlStr,req.auth,(err,results)=>{
//         console.log(req.auth)
//         // 执行语句失败
//         if(err) return res.cc(err)
//         // 执行SQL语句成功，但是查询的结果可能为空
//         if(results.length !== 1) return res.cc('获取用户信息失败')

//         // 用户信息获取成功
//         res.send({
//             status:0,
//             message:'获取用户信息成功',
//             data:results[0]

//         })
//     })
// }